package com.dhcc.sds.busi.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dhcc.sds.base.entity.SdsQcformItemEntity;
import com.dhcc.sds.busi.dto.SdsQcFormItemDto;
import com.dhcc.sds.standard.dto.CdcExaminateDto;
import com.dhcc.sds.standard.dto.CdcLisReportDto;
import com.dhcc.sds.standard.dto.CdcNurDto;
import com.dhcc.sds.standard.dto.CdcOrdmastDto;

import javax.script.ScriptException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 病种表单填报接口
 *
 * @ClassName: ISdsQcFormShowService
 * @Description: TODO
 * @author sunyingjie
 * @date 2021-03-22 10:09:15
 */
public interface ISdsQcFormShowService {

    /**
     * 查询项目校验规则涉及到的项目id
     * @param params
     * @return
     */
    JSONArray getRuleLinkItem(Map<String, Object> params);
    /**
     * 进行项目校验并返回校验信息
     * @param params
     * @return
     */
    JSONArray getValidMsg(Map<String, Object> params) throws ScriptException;
    /**
     * 查询前置条件并计算显示属性
     * @param mrListId 入组id
     * @param item
     * @return
     */
    Integer calcTriggerExp(Long mrListId, SdsQcformItemEntity item, Map<String, Object> map) throws ScriptException;
    /**
     * 查询前置条件涉及到的项目id
     * @param params
     * @return
     */
    JSONArray getTriggerLinkItem(Map<String, Object> params);
    /**
     * 对关联项目进行判断并返回显隐信息
     * @param params
     * @return
     */
    JSONArray getLinkItemMsg(Map<String, Object> params) throws ScriptException, UnsupportedEncodingException;
    /**
     * 获取该项目有关的逻辑取值相关联的项目及其他项
     * @param params
     * @return
     */
    JSONArray getLogicLinkItem(Map<String, Object> params);

    /**
     * 对关联项目进行判断并返回显隐信息
     * @param params
     * @return
     */
    JSONObject getLinkItemDefaultVal(Map<String, Object> params);
    /**
     * 获取表单信息（包括结果值、显隐属性）
     * @param mrListId
     * @return
     */
    List<SdsQcFormItemDto> getItemInfo(Long mrListId) throws Exception;
    /**
     * 组装接口上传数据
     * @param formItemList
     * @return
     */
    JSONObject assembData(List<SdsQcFormItemDto> formItemList);
    /**
     * 上传数据
     * @param mrListId
     * @param dataJSON
     * @return
     */
    Map<String, Object> uploadData(Long mrListId, JSONObject dataJSON);
    /**
     * 获取表单信息（包括结果值、显隐属性）
     * @param mrListId
     * @return
     */
    List<SdsQcFormItemDto> getItemResult(Long mrListId) throws Exception;
    /**
     * @param params
     * @return
     * @Description: 获取评估量表信息
     * @Title: getAsmtInfo
     * @author: sunyingjie
     * @date: 2021年09月16日15:08:52
     */
    Map<String, Object> getAsmtInfo(Map<String, Object> params);
    /**
     * @param params
     * @return
     * @Description: 保存评估量表信息
     * @Title: saveAsmtInfo
     * @author: sunyingjie
     * @date: 2021年09月16日15:08:52
     */
    void saveAsmtInfo(Map<String, Object> params);

    void handleHisMessage(String msgId, String execUserId);

    String getDataByAdm(Map<String, Object> params);

    String getDataByFee(Map<String, Object> params);

    List<CdcOrdmastDto> getDataByOrder(Map<String, Object> params);

    List<CdcLisReportDto> getDataByLisReport(Map<String, Object> params);

    List<CdcLisReportDto> getDataByLisResult(Map<String, Object> params);

     List<CdcExaminateDto> getDataByRisReport(Map<String, Object> params);

    List<CdcNurDto> getDataByNur(Map<String, Object> params);

    Object getAIAsmtInfo(Map<String, Object> params);

    void saveAIAsmtInfo(Map<String, Object> params);

    String reEnroll(Map<String, Object> params);

    String getItemSourceDetail(Map<String, Object> params);
    
    /**
     * 表单项目实时取值相关联的项目
     * @param params
     * @return
     */
    JSONArray getRealTimeItem(Map<String, Object> params);
}
